//
//  StringStudy.swift
//  Swift3.0_Study
//
//  Created by chengfeng on 2016/9/26.
//  Copyright © 2016年 zhaochengfeng. All rights reserved.
//

import Cocoa

class StringStudy: NSObject {
/*
     字符串和字符
     
     字符串是有序的字符集合,或者叫文本.如"我已经使用了洪荒之力".
     String是字符串类型,Character是字符类型.
     2个字符串可以通过 + 来连接.
     💡通过字符串插值可合成一个长字符串.
 */
    //字符串字面量.  包含双引号""的值成为字符串字面量.
    
    func start() -> Void {
        let a = ""
        let b = " "
        if a.isEmpty {
            print("a是空的")
        }
        
        if b.isEmpty {
            print("b是空的")
        }
        
        //字符
        
        self.charStudy()
    }
    
    func charStudy() -> Void {
        let H: Character = "H"
        print(H)
        
        let str = "my name"
        for char in str.characters {
            print(char)
        }
        
        let a = "洪荒"
        let b = "少女"
        let c = "傅园慧"
        
        var famous = a + b + c
        print(famous)
        famous.append("!")
        print(famous)
        
        //字符串插值:组合常量/变量/字面量/表达式成一个长字符串
        let name = "chengfeng"
        let type = "G"
        let number = 11
        let price = 158.5
        
        var tip = "\(name)先生, 您订购了\(type)\(number)的往返票,需支付\(price * 2)元."
        print(tip)
        
        //特殊字符: \0 \ \t \n \r " ' \u{n}
        //字符计数: 使用字符串characters属性的count属性来获取字符个数.
        print(tip.characters.count)
        
        //修改字符串. 通过字符串的各种方法和属性,其中一种方法是使用索引.
        //首字符索引 startIndex, endIndex是尾字符后一个位置.
        print("订票提示的首字符是 \(tip[tip.startIndex])")
        print("订票提示的第二个字符是\(tip[tip.characters.index(after: tip.startIndex)])")
        print("订票提示的最后一个字符是\(tip[tip.characters.index(before: tip.endIndex)])")
       
        print("订票提示的第四个字符是\( tip[tip.characters.index(tip.startIndex, offsetBy: 3)])")
        
        //修改字符串-插入和删除
        tip.remove(at: tip.characters.index(before: tip.endIndex))
        tip.insert("!", at: tip.endIndex)
        print(tip)
        
        //插入一个字符串
        tip.insert(contentsOf: "请核实".characters, at: tip.endIndex)
        print(tip)
        
        //删除一个指定索引的字符,用removeAtIndex方法.🌰删除字符串的最后一位.
        tip.remove(at: a.startIndex)
        print(tip)
        
        //删除一个范围的子串,用removeRange方法.🌰删除之前添加的字符串
        let startIndex = tip.characters.index(tip.startIndex, offsetBy: 10)
        tip.removeSubrange(startIndex ..< tip.endIndex)
        print(tip)
        
        //比较字符串: Swift提供3种方法比较文本值: 字符串和字符相等性,前缀相等,后缀相等
        /*
         字符串和字符相等性:用 == 或 != 操作符. Unicode扩展语素组合而成的字符与正式的单个字符被视为相等.
         但不同语义的Unicode字符是不相等的. 比如英语的A和俄文的A虽然相似,但语义不同,不能视为相等. 中文的"对"和日文的"対"虽然语义相同,字型明显不同.
         前缀和后缀相等: 用于检查一个字符串是否具有特定前缀和后缀. hasPrefix和hasSuffix
         */
    }
    
}
